#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
第一行注释是为了告诉Linux/OS X系统，这是一个Python可执行程序，Windows系统会忽略这个注释；
第二行注释是为了告诉Python解释器，按照UTF-8编码读取源代码，否则，你在源代码中写的中文输出可能会有乱码。
'''

'''IO学习'''

f=open('E:/pySpace/text.txt','r')
#调用read()会一次性读取文件的全部内容
print f.read()
f.close()

#如果文件不存在，open()函数就会抛出一个IOError的错误
# f=open('ss.txt','r')

'''
try:
	f=open('ss.txt','r')
	print f
finally:
	if f:
		f.close()
'''

#Python引入了with语句来自动帮我们调用close()方法：
with open('E:/pySpace/text.txt','r') as f:
	print f.read()
	

#调用readlines()一次读取所有内容并按行返回list
with open('E:/pySpace/text.txt','r') as f:
	for line in f.readlines():
		print 'row='+line.strip()
		
#调用readline()可以每次读取一行内容

#读取二进制文件
with open('E:/pySpace/image.png','rb') as f:
	print f.read()
	
#读取GBK编码的文件
import codecs
with codecs.open('E:/pySpace/gbk.txt','r','gbk') as f:
	print f.read()
	

#写文件
# with open('E:/pySpace/text.txt','w') as f:
	# f.write('Write in')
	

import os

# 查看当前目录的绝对路径:
path=os.path.abspath('.')
print u'当前目录：'+path

# 在某个目录下创建一个新目录，
# 首先把新目录的完整路径表示出来
#把两个路径合成一个时，不要直接拼字符串，而要通过os.path.join()函数，这样可以正确处理不同操作系统的路径分隔符
newPath=os.path.join(path,'newDir')
print newPath

#新建一个文件夹
# os.mkdir(newPath)
#删除一个文件夹
# os.rmdir(newPath)

#获取text.txt的路径
tPath=os.path.join(path,'text.txt')
#拆分，后一部分总是最后级别的目录或文件名
print os.path.split(tPath)
#获得文件扩展名
print os.path.splitext(tPath)
print u'text.txt的扩展名是:'+os.path.splitext(tPath)[1]

#文件重命名
# os.rename('text.txt','change.py')
#删除文件
# os.remove('change.py')

#获得当前目录下的所有文件名或目录名
print os.listdir('.')

#获得当前目录下的所有目录
print [x for x in os.listdir('.') if os.path.isdir(x)]

#获得当前目录下的所有py文件
print [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']


print '-----------------------------------------------------------------------'
'''练习：编写一个search(s)的函数，能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件，并打印出完整路径'''

# print "os.path.abspath('E:/pySpace/newDir')="+os.path.abspath('E:/pySpace/newDir')

def search(s,target='.'):
	#获取指定目录的路径
	currentPath=os.path.abspath(target)
	#获取指定目录下的所有文件和文件夹
	dirs=os.listdir(target)
	#遍历文件和文件夹
	for dir in dirs:
		dirPath=os.path.join(currentPath,dir)
		if os.path.isfile(dirPath) and s in dir:#是文件
			print dirPath
		elif os.path.isdir(dirPath):#是目录
			search(s,os.path.join(currentPath,dirPath))
	
search('py','.')

print '-----------------------------------------------------------------------'

'''序列化'''

try:
	import cPickle as pickle
except ImportError:
	import pickle
	
d=dict(name='tzj',age=24)
#序列化
ser=pickle.dumps(d)
print ser
#反序列化
ddd=pickle.loads(ser)
print ddd

#序列化并保存到文件中
with open('dump.txt','w') as f:
	pickle.dump(d,f)

#读取文件并反序列化
with open('dump.txt','r') as f:
	result=pickle.load(f)

print result

'''Json'''
import json

d=dict(name='tangzhijie',age=25,sex='male')

jsonstring=json.dumps(d)
print jsonstring

print json.loads(jsonstring)

#unicode转utf-8
print u'hahah'.encode('utf-8')

# Json保存到文件中，并读取

with open('json.txt','w') as f:
	json.dump(d,f)
	
with open('json.txt','r') as f:
	result=json.load(f)
	print result


